package com.rafaelGarcia.eLibreria.modelos.implementaciones;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.rafaelGarcia.eLibreria.modelos.interfaces.Editorial;
import com.rafaelGarcia.eLibreria.modelos.interfaces.Ejemplar;
import com.rafaelGarcia.eLibreria.modelos.interfaces.Libro;
import com.rafaelGarcia.eLibreria.modelos.interfaces.Loc;
import com.rafaelGarcia.eLibreria.modelos.interfaces.RIVA;

@Entity
@Table(name = "ejemplares")
public class EjemplarImpl implements Ejemplar {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -719336851871542990L;
	
	@EmbeddedId
	private EjemplarPK id;
	
	private Double precio;

	@OneToOne(targetEntity = LocImpl.class)
	private Loc localizacion;
	
	@OneToOne(targetEntity = RIVAImpl.class)
	private RIVA regimen;
	
	private Boolean vendido = false;
	
	@ManyToOne(targetEntity = LibroImpl.class)
	@JoinColumn(name = "pk_Libro", insertable = false, updatable = false)
	private Libro miLibro = null;
	
	@ManyToOne(targetEntity = EditorialImpl.class)
	@JoinColumn(name = "pk_Editorial", insertable = false, updatable = false)
	private Editorial miEditorial = null;
	
	public EjemplarImpl(){}
	
	public EjemplarImpl(EjemplarPK i, Double p, Loc l, RIVA r, boolean v){
		id = i; 
		precio = p;
		localizacion = l;
		regimen = r;
		vendido = v;
	}

	public EjemplarPK getId() {
		return id;
	}
	public void setId(EjemplarPK i) {
		id = i;
	}

	public Double getPrecio() {
		return precio;
	}
	public void setPrecio(Double d) {
		precio = d;
	}

	public RIVA getRegimenIVA() {
		return regimen;
	}
	public void setRegimenIVA(RIVA r) {
		regimen = r;
	}

	public Loc getLocalizacion() {
		return localizacion;
	}
	public void setLocalizacion(Loc l) {
		localizacion = l;
	}

	public Boolean getVendido() {
		return vendido;
	}
	public void vendido() {
		vendido = true;
	}

	public Libro getMiLibro() {
		return miLibro;
	}
	public void setMiLibro(Libro l){
		miLibro = l;
	}

	public Editorial getMiEditorial() {
		return miEditorial;
	}
	public void setMiEditorial(Editorial l){
		miEditorial = l;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result	+ ((localizacion == null) ? 0 : localizacion.hashCode());
		result = prime * result + ((precio == null) ? 0 : precio.hashCode());
		result = prime * result + ((regimen == null) ? 0 : regimen.hashCode());
		result = prime * result + ((vendido == null) ? 0 : vendido.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		boolean res = false;
		
		if(obj == this){
			res = true;
		}
		else if(obj instanceof EjemplarImpl){
			EjemplarImpl e = (EjemplarImpl) obj;
			
			res = e.getId().equals(id) && e.getLocalizacion().equals(localizacion) && e.getPrecio().equals(precio) 
					&& e.getRegimenIVA().equals(regimen) && e.getVendido().equals(vendido);
		}
		
		return res;
	}
	public String toString(){
		return "Ejemplar [" + id.toString() + "]";
	}
}
